package com.story.rpc.dto;

import cn.hutool.core.util.StrUtil;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 *
 * 发请求：携带通用的信息
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class RpcReq implements Serializable {

    private static final long serialVersionUID = 1L;

    // 请求id
    private String reqId;

    // 暴露的接口名
    private String interfaceName;

    // 调用的方法名
    private String methodName;

    // 方法参数
    private Object[] params;

    // 方法参数类型
    private Class<?>[] paramTypes;
    private String version;
    private String group;

    /** version 1和2的区别            group 区分不同服务的实现，这里是普通用户和管理员
     *  UserService ---> CommonUserServiceImpl1.getUser()
     *              ---> CommonUserServiceImpl2.getUser()
     *              ---> AdminUserServiceImpl1.getUser()
     *              ---> AdminUserServiceImpl2.getUser()
     */
    public String rpcServiceName(){
        return getInterfaceName()
                + StrUtil.blankToDefault(getVersion(), StrUtil.EMPTY)
                + StrUtil.blankToDefault(getGroup(), StrUtil.EMPTY);
    }


}
